package cn.com.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Base64;

/**
 * Base64工具
 *
 * @author LiuGuodong
 * @date 2024/01/23
 */
public class Base64Util {

    /**
     * 将base64写入文件
     *
     * @param base64Image    base64图像
     * @param outputFilePath 输出文件路径
     * @throws IOException IOException
     */
    public static void writeBase64ToFile(String base64Image, String outputFilePath) throws IOException {
        FileUtil.write(base64Image, outputFilePath);
    }

    /**
     * 图像到Base64
     *
     * @param imagePath 图像路径
     * @return {@link String}
     * @throws IOException IOException
     */
    public static String imageToBase64(String imagePath) throws IOException {
        // 读取图片文件
        File imageFile = new File(imagePath);
        try (FileInputStream imageInputStream = new FileInputStream(imageFile)) {
            // 创建字节数组来存储图片数据
            byte[] imageBytes = new byte[(int) imageFile.length()];

            // 读取图片数据到字节数组
            imageInputStream.read(imageBytes);

            // 使用 Base64 编码器编码字节数组为 Base64 字符串
            return Base64.getEncoder().encodeToString(imageBytes);
        }
    }

    /**
     * 编码
     *
     * @param plainText 纯文本
     * @return {@link String}
     */
    public static String encode(String plainText) {
        byte[] encodedBytes = Base64.getEncoder().encode(plainText.getBytes());
        return new String(encodedBytes);
    }


    /**
     * 解码
     *
     * @param base64Text base64文本
     * @return {@link String}
     */
    public static String decode(String base64Text) {
        byte[] decodedBytes = Base64.getDecoder().decode(base64Text.getBytes());
        return new String(decodedBytes);
    }
}
